package com.ruoyi.system.Config;


import com.ruoyi.system.service.AITongYiAdvisorService;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Description;

import java.util.function.Function;

@Configuration
public class AITongYiAIConfig {

    // 注册 ChatMemory Bean
    @Bean
    public ChatMemory chatMemory() {
        return new InMemoryChatMemory();
    }

    // 注册 Function Bean，注入 ChatMemory
    @Bean
    @Description("当用户回复项目有关的内容时调用")
    public Function<AITongYiAdvisorService.Request, AITongYiAdvisorService.Response> AdviseFunction(ChatMemory chatMemory) {
        return new AITongYiAdvisorService(chatMemory);
    }
    // 注册 TemplateService 的 Function Bean
//    @Bean
//    @Description("当用户选择具体编程语言和具体框架时调用")
//    public Function<TemplateService.Request, TemplateService.Response> TemplateFunction() {
//        return new TemplateService();
//        // 这里调用 TemplateService 的 getTemplate 方法
//    }

    @Bean
    public ChatClient chatClient(ChatClient.Builder builder, ChatMemory chatMemory) {
        return builder
                .defaultSystem("你是一个专业的AI编程助手，请根据接下来的问题提供专业的编程帮助。" +
                        "你的回答语言默认为简体中文，并且语言风格简练准确。用户首次回复和项目一有关的问题时，请询问用户使用什么编程语言" +
                        "用户确定了编程工具之后，回答问题时，只需要提供代码，不要解释其工作原理，优先选择最高效的最标准的解决方案。")
                .defaultAdvisors(new PromptChatMemoryAdvisor(chatMemory))
                .defaultFunctions("AdviseFunction")
                .build();
    }
//    "TemplateFunction",  Function<TemplateService.Request, TemplateService.Response> templateFunction


}

